# ============================================
# Linux系统审计规则配置文件
# ============================================
# 本文件由Ansible自动生成 - 请勿手动编辑
# 定义了系统安全审计的详细规则，用于监控关键系统活动

# 删除所有现有的审计规则，重新开始配置
-D

# 设置审计缓冲区大小为8192字节
# 较大的缓冲区可以减少审计记录丢失的风险
-b 8192

# 设置审计失败模式为1（记录失败但继续运行）
# 0=静默失败，1=记录失败，2=内核panic
-f 1

# 忽略当前工作目录记录（减少日志噪音）
-a always,exclude -F msgtype=CWD

# 忽略事件结束记录（通常不需要）
-a always,exclude -F msgtype=EOE

# 忽略cron作业产生的审计记录（与SELinux配合使用）
# cron作业会产生大量通常不需要的日志记录
-a never,user -F subj_type=crond_t
-a exit,never -F subj_type=crond_t

# 防止chrony时间同步服务产生过多日志
-a never,exit -F arch=b64 -S adjtimex -F auid=unset -F uid=chrony -F subj_type=chronyd_t

# 忽略加密密钥用户消息（对于面向公网的服务器，这类消息会占用大量空间）
-a always,exclude -F msgtype=CRYPTO_KEY_USER

# VMware工具相关的忽略规则
# 忽略VMware工具产生的失败fork调用
-a exit,never -F arch=b32 -S fork -F success=0 -F path=/usr/lib/vmware-tools -F subj_type=initrc_t -F exit=-2
-a exit,never -F arch=b64 -S fork -F success=0 -F path=/usr/lib/vmware-tools -F subj_type=initrc_t -F exit=-2

# 高频事件过滤器（特别适用于Linux工作站）
# 忽略常用命令的执行记录以减少日志量
-a exit,never -F arch=b32 -S execve -F path=/bin/ls
-a exit,never -F arch=b64 -S execve -F path=/bin/ls
-a exit,never -F arch=b32 -S execve -F path=/usr/bin/file
-a exit,never -F arch=b64 -S execve -F path=/usr/bin/file

# 从变量中加载的自定义审计规则
# 这些规则在defaults/main.yml中定义，可以根据需要进行配置
{% for rule in security_audit_rules %}
{{ rule }}
{% endfor %}

# ============================================
# 系统调用审计规则
# ============================================

# 监控失败的文件操作（权限被拒绝的情况）
# 这有助于检测未授权的文件访问尝试
-a always,exit -F arch=b32 -S open,creat,truncate,ftruncate,openat -F exit=-EACCES -k file_access
-a always,exit -F arch=b32 -S open,creat,truncate,ftruncate,openat -F exit=-EPERM -k file_access
-a always,exit -F arch=b64 -S open,creat,truncate,ftruncate,openat -F exit=-EACCES -k file_access
-a always,exit -F arch=b64 -S open,creat,truncate,ftruncate,openat -F exit=-EPERM -k file_access

# 监控普通用户的未授权文件访问尝试
# auid>=1000表示普通用户，auid!=4294967295排除未设置审计ID的进程
-a always,exit -F arch=b32 -S open,creat,truncate,ftruncate,openat,open_by_handle_at -F exit=-EACCES -F auid>=1000 -F auid!=4294967295 -k access
-a always,exit -F arch=b32 -S open,creat,truncate,ftruncate,openat,open_by_handle_at -F exit=-EPERM -F auid>=1000 -F auid!=4294967295 -k access
-a always,exit -F arch=b64 -S open,creat,truncate,ftruncate,openat,open_by_handle_at -F exit=-EACCES -F auid>=1000 -F auid!=4294967295 -k access
-a always,exit -F arch=b64 -S open,creat,truncate,ftruncate,openat,open_by_handle_at -F exit=-EPERM -F auid>=1000 -F auid!=4294967295 -k access

# ============================================
# 进程和会话监控
# ============================================

# 监控用户会话和登录记录文件的变化
-w /var/run/utmp -p wa -k session     # 当前登录用户信息
-w /var/log/btmp -p wa -k session     # 失败的登录尝试
-w /var/log/wtmp -p wa -k session     # 登录历史记录

# ============================================
# 登录配置和信息监控
# ============================================

# 监控登录相关配置文件的修改
-w /etc/login.defs -p wa -k login     # 登录默认设置
-w /etc/securetty -p wa -k login      # 安全终端配置
-w /var/log/faillog -p wa -k login    # 登录失败日志
-w /var/log/lastlog -p wa -k login    # 最后登录记录
-w /var/log/tallylog -p wa -k login   # 登录尝试计数

# ============================================
# 网络配置监控
# ============================================

# 监控网络配置文件的修改，防止网络劫持和配置篡改
-w /etc/hosts -p wa -k network_config                    # 主机名解析文件
-w /etc/sysconfig/network -p wa -k network_config        # 网络基本配置
-w /etc/sysconfig/network-scripts/ -p wa -k network_config # 网络接口脚本
-w /etc/NetworkManager/ -p wa -k network_config          # NetworkManager配置

# ============================================
# 系统启动脚本监控
# ============================================

# 监控系统启动相关文件的修改，防止恶意启动项
-w /etc/inittab -p wa -k init        # 系统初始化表
-w /etc/init.d/ -p wa -k init        # SysV初始化脚本目录
-w /etc/init/ -p wa -k init          # Upstart配置目录

# ============================================
# 库搜索路径监控
# ============================================

# 监控动态链接库配置的修改，防止库劫持攻击
-w /etc/ld.so.conf -p wa -k libpath     # 动态链接库配置文件
-w /etc/ld.so.conf.d/ -p wa -k libpath  # 动态链接库配置目录

# ============================================
# 内核参数和模块监控
# ============================================

# 监控内核参数配置的修改
-w /etc/sysctl.conf -p wa -k sysctl     # 内核参数配置文件
-w /etc/sysctl.d/ -p wa -k sysctl       # 内核参数配置目录

# 监控内核模块配置的修改，防止恶意模块加载
-w /etc/modprobe.conf -p wa -k modprobe # 模块加载配置文件
-w /etc/modprobe.d/ -p wa -k modprobe   # 模块加载配置目录
-w /etc/modules -p wa -k modprobe       # 启动时加载的模块列表

# ============================================
# PAM认证配置监控
# ============================================

# 监控PAM（可插拔认证模块）配置的修改
-w /etc/pam.d/ -p wa -k pam                    # PAM配置目录
-w /etc/security/limits.conf -p wa -k pam      # 用户资源限制配置
-w /etc/security/limits.d/ -p wa -k pam        # 用户资源限制配置目录
-w /etc/security/pam_env.conf -p wa -k pam     # PAM环境变量配置
-w /etc/security/namespace.conf -p wa -k pam   # PAM命名空间配置
-w /etc/security/namespace.d/ -p wa -k pam     # PAM命名空间配置目录
-w /etc/security/namespace.init -p wa -k pam   # PAM命名空间初始化脚本

# ============================================
# 邮件系统配置监控
# ============================================

# 监控邮件系统配置的修改
-w /etc/aliases -p wa -k mail      # 邮件别名配置
-w /etc/postfix/ -p wa -k mail     # Postfix邮件服务器配置

# ============================================
# SSH配置监控
# ============================================

# 监控SSH服务配置的修改
-w /etc/ssh/sshd_config -p wa -k sshd  # SSH服务器配置文件

# ============================================
# 主机名监控
# ============================================

# 监控主机名的修改（系统调用和配置文件）
-a exit,always -F arch=b32 -S sethostname -k hostname  # 32位系统调用
-a exit,always -F arch=b64 -S sethostname -k hostname  # 64位系统调用
-w /etc/hostname -p wa -k hostname                     # 主机名配置文件
-w /etc/hosts -p wa -k hostname                        # 主机名解析文件
-w /etc/sysconfig/network -p wa -k hostname            # 网络配置中的主机名

# ============================================
# 系统信息监控
# ============================================

# 监控系统登录提示信息的修改
-w /etc/issue -p wa -k etcissue        # 本地登录提示信息
-w /etc/issue.net -p wa -k etcissue    # 网络登录提示信息

# ============================================
# 特权用户活动监控
# ============================================

# 记录root用户执行的所有命令
# 这对于审计管理员活动非常重要
-a exit,always -F arch=b64 -F euid=0 -S execve -k rootcmd  # 64位系统
-a exit,always -F arch=b32 -F euid=0 -S execve -k rootcmd  # 32位系统

# ============================================
# 文件删除监控
# ============================================

# 监控普通用户的文件删除操作
# 有助于检测恶意文件删除或数据破坏
-a always,exit -F arch=b32 -S rmdir,unlink,unlinkat,rename,renameat -F auid>=1000 -F auid!=4294967295 -k delete
-a always,exit -F arch=b64 -S rmdir,unlink,unlinkat,rename,renameat -F auid>=1000 -F auid!=4294967295 -k delete

# ============================================
# sudo权限配置监控
# ============================================

# 监控sudo配置文件的修改
-w /etc/sudoers -p wa -k scope      # 主sudo配置文件
-w /etc/sudoers.d/ -p wa -k scope   # sudo配置目录

# ============================================
# 内核模块操作监控
# ============================================

# 监控内核模块的加载和卸载操作
# 防止恶意内核模块的安装
-a always,exit -F arch=b64 -S init_module,delete_module -k modules  # 64位系统
-a always,exit -F arch=b32 -S init_module,delete_module -k modules  # 32位系统

# ============================================
# 配置锁定
# ============================================

# 使审计配置不可变更（需要重启才能修改）
# 2表示锁定配置，防止运行时修改审计规则
-e 2